﻿Imports Dainfo.ControleEstoque.Model
Imports System.Data.SqlClient

Public Class DadosProduto
    Inherits AcessoDadosBase

    Public Function GetAll() As List(Of Produto)
        Dim produtos As New List(Of Produto)
        For Each row As DataRow In ExecuteReaderReturnTable(GetCommand("Select * from  View_GetAllProduto")).Rows
            Dim entidade As Produto = GetEntidadeByTableRow(row)
            If Not entidade Is Nothing Then
                produtos.Add(entidade)
            End If
        Next
        Return produtos
    End Function

    Public Function GetById(ByVal codigo As Integer) As Produto
        Dim entidade As Produto = Nothing
        Dim cmd As SqlCommand = GetProcedureCommand("GetProdutoByCodigo")
        AddParameterToCmd(cmd, "@Codigo", codigo)
        Dim table As DataTable = ExecuteReaderReturnTable(cmd)
        If table.Rows.Count > 0 Then
            entidade = GetEntidadeByTableRow(table.Rows(0))
        End If
        Return entidade
    End Function

    Public Function GetByNome(ByVal nome As String) As List(Of Produto)
        Dim produtos As New List(Of Produto)
        Dim cmd As SqlCommand = GetProcedureCommand("GetProdutoByDescricao")
        AddParameterToCmd(cmd, "@Descricao", nome)

        For Each row As DataRow In ExecuteReaderReturnTable(cmd).Rows
            Dim entidade As Produto = GetEntidadeByTableRow(row)
            If Not entidade Is Nothing Then
                produtos.Add(entidade)
            End If
        Next
        Return produtos
    End Function

    Public Sub Update(ByVal produto As Produto)
        Dim cmd As SqlCommand = GetCommand("Update Produto Set Descricao=@Descricao, ValorCompra=@ValorCompra, ValorVenda=@ValorVenda, CodGrupo=@CodGrupo, CodMarca=@CodMarca, Quantidade=@Quantidade, DescricaoWeb=@DescricaoWeb Where CodProduto = @Codigo")
        AddParameterToCmd(cmd, "@Codigo", produto.Codigo)
        AddParameterToCmd(cmd, "@Descricao", produto.Descricao)
        AddParameterToCmd(cmd, "@DescricaoWeb", produto.DescricaoWeb)
        AddParameterToCmd(cmd, "@ValorCompra", produto.ValorCompra)
        AddParameterToCmd(cmd, "@ValorVenda", produto.ValorVenda)
        AddParameterToCmd(cmd, "@Quantidade", produto.Quantidade)
        AddParameterToCmd(cmd, "@CodGrupo", produto.Grupo.Codigo)
        AddParameterToCmd(cmd, "@CodMarca", produto.Marca.Codigo)

        ExecuteScalar(cmd)
    End Sub

    Public Sub Delete(ByVal codigo As Integer)
        Dim cmd As SqlCommand = GetCommand("Delete From Produto Where CodProduto=@Codigo")
        AddParameterToCmd(cmd, "@Codigo", codigo)
        ExecuteScalar(cmd)
    End Sub

    Public Sub Insert(ByVal produto As Produto)
        Dim cmd As SqlCommand = GetCommand("Insert into Produto (Descricao, ValorCompra, ValorVenda, CodGrupo, CodMarca,Quantidade, DescricaoWeb) Values (@Descricao, @ValorCompra, @ValorVenda, @CodGrupo, @CodMarca, @Quantidade, @DescricaoWeb)")
        AddParameterToCmd(cmd, "@Descricao", produto.Descricao)
        AddParameterToCmd(cmd, "@DescricaoWeb", produto.DescricaoWeb)
        AddParameterToCmd(cmd, "@ValorCompra", produto.ValorCompra)
        AddParameterToCmd(cmd, "@ValorVenda", produto.ValorVenda)
        AddParameterToCmd(cmd, "@CodGrupo", produto.Grupo.Codigo)
        AddParameterToCmd(cmd, "@CodMarca", produto.Marca.Codigo)
        AddParameterToCmd(cmd, "@Quantidade", produto.Marca.Codigo)

        ExecuteScalar(cmd)
    End Sub

    Private Function GetEntidadeByTableRow(ByVal row As DataRow) As Produto
        Dim entidade As New Produto
        entidade.Codigo = GetStringFromRow(row, "CodProduto")
        entidade.Descricao = GetStringFromRow(row, "Descricao")
        entidade.DescricaoWeb = GetStringFromRow(row, "DescricaoWeb")

        entidade.Grupo = New Grupo()
        entidade.Grupo.Codigo = GetIntFromRow(row, "CodGrupo")
        entidade.Grupo.Nome = GetStringFromRow(row, "Grupo")

        entidade.Marca = New Marca()
        entidade.Marca.Codigo = GetIntFromRow(row, "CodMarca")
        entidade.Marca.Nome = GetStringFromRow(row, "Marca")

        entidade.ValorVenda = Convert.ToDouble(row("ValorVenda"))
        entidade.ValorCompra = Convert.ToDouble(row("ValorCompra"))
        entidade.Quantidade = GetIntFromRow(row, "Quantidade")


        Return entidade
    End Function

    Protected Overrides Sub Finalize()
        MyBase.Finalize()
    End Sub
End Class
